#ifndef DISKMANAGER_H
#define DISKMANAGER_H

#include <QString>

class DiskManager
{
public:
    /**
     * @brief isDir 判断指定路径是否为目录
     * @param path 路径
     * @return 是目录返回true
     */
    static bool isDir(const QString &path);

    /**
     * @brief fileExists 文件是否存在
     * @param path 文件全路径
     * @return 存在返回true
     */
    static bool fileExists(const QString &path);

    /**
     * @brief dirExists 目录是否存在
     * @param path 目录全路径
     * @return 存在返回true
     */
    static bool dirExists(const QString &path);

    /**
     * @brief mkdir 创建文件夹
     * @param path 路径
     * @return 创建成功返回true
     */
    static bool mkdir(const QString &path);

    /**
     * @brief copyFile 拷贝文件
     * @param srcPath 源文件路径
     * @param dstPath 目标文件路径
     * @param coverFileIfExist 是否覆盖同名文件
     * @return 拷贝成功返回true
     */
    static bool copyFile(const QString &srcPath, const QString &dstPath, bool coverFileIfExist);

    /**
     * @brief copyDirectory 拷贝目录
     * @param srcPath 源目录
     * @param dstPath 目标目录
     * @param coverFileIfExist 是否覆盖同名目录
     * @return 拷贝成功返回true
     */
    static bool copyDirectory(const QString &srcPath, const QString &dstPath, bool coverFileIfExist);

    /**
     * @brief deleteFile 删除文件
     * @param path 文件路径
     * @return 删除成功返回true
     */
    static bool deleteFile(const QString &path);

    /**
     * @brief deleteDirectory 删除目录，包括子目录
     * @param path 目录路径
     * @return 删除成功返回true
     */
    static bool deleteDirectory(const QString &path);

    /**
     * @brief deleteDirectory 删除空目录
     * @param path 目录路径
     * @return 删除成功返回true
     */
    static bool deleteEmptyDirectory(const QString &path);

    /**
     * @brief toNormalizedPath 以绝对路径和平台相关的分隔符归一化路径
     * @param path 路径
     * @return 处理后的路径
     */
    static QString toNormalizedPath(const QString &path);

    /**
     * @brief getFreeSpace 获取磁盘可用空间
     * @param driver 驱动器路径
     * @return 可用空间，单位: M
     */
    static quint64 getFreeSpace(const QString &driver);

private:
    DiskManager();
    Q_DISABLE_COPY(DiskManager)
};

#endif // DISKMANAGER_H
